package com.siss.tenancy.user.utils;

import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;

@SuppressWarnings("unchecked")
@Component
public class UserUtils<T> {
	
	/**
	 * 获取请求用户实际ip地址的方法
	 * @param request
	 * @return
	 * @throws Exception
	 */
	public static String getUserIp(HttpServletRequest request) throws Exception{
		
       String ip = request.getHeader("x-forwarded-for");   
       
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {   
           ip = request.getHeader("Proxy-Client-IP");   
       }   
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {   
           ip = request.getHeader("WL-Proxy-Client-IP");   
       }   
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {   
           ip = request.getRemoteAddr();   
           if(ip.equals("127.0.0.1")){     
               //根据网卡取本机配置的IP     
               InetAddress inet=null;     
               try {     
                   inet = InetAddress.getLocalHost();     
               } catch (UnknownHostException e) {     
                   throw e;
               }     
               ip= inet.getHostAddress();     
           }  
       }   
       // 对于通过多个代理的情况，第一个IP为客户端真实IP,多个IP按照','分割  
       if(ip != null && ip.length() > 15){    
           if(ip.indexOf(",")>0){     
               ip = ip.substring(0,ip.indexOf(","));     
           }     
       }     
       return ip;  
	}
	
	
}
